// Decompiled by DJ v3.11.11.95 Copyright 2009 Atanas Neshkov  Date: 17/4/2011 22:58:40
// Home Page: http://members.fortunecity.com/neshkov/dj.html  http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   Factory.java

package com.opensymphony.module.sitemesh;

import java.lang.reflect.Constructor;

import com.opensymphony.module.sitemesh.factory.FactoryException;
import com.opensymphony.module.sitemesh.util.ClassLoaderUtil;

// Referenced classes of package com.opensymphony.module.sitemesh:
//            Config, PageParserSelector, DecoratorMapper, PageParser

public abstract class Factory implements PageParserSelector {

	public Factory() {
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static Factory getInstance(Config config) {
		Factory instance = (Factory) config.getServletContext().getAttribute(
				"sitemesh.factory");
		if (instance == null) {
			String factoryClass = getEnvEntry("sitemesh.factory",
					"com.opensymphony.module.sitemesh.factory.DefaultFactory");
			try {
				Class cls = ClassLoaderUtil.loadClass(factoryClass,
						config.getClass());
				Constructor con = cls
						.getConstructor(new Class[] { com.opensymphony.module.sitemesh.Config.class });
				instance = (Factory) con.newInstance((Object[])new Config[] { config });
				config.getServletContext().setAttribute("sitemesh.factory",
						instance);
			} catch (Exception e) {
				throw new FactoryException("Cannot construct Factory : "
						+ factoryClass, e);
			}
		}
		instance.refresh();
		return instance;
	}

	public abstract void refresh();

	public abstract DecoratorMapper getDecoratorMapper();

	public abstract PageParser getPageParser(String s);

	public abstract boolean shouldParsePage(String s);

	public abstract boolean isPathExcluded(String s);

	private static String getEnvEntry(String envEntry, String defaultValue) {
		return defaultValue;
	}

}
